import torch

print(torch.__version__)
print(torch.cuda.is_available())

# <动手学习深度学习> 2.1 数据操作

# 张量tensor表示一个由数值组成的数组，这个数组可能有多个维度。具有一个轴的张量对应数学上的向量（vector）；
# 具有两个轴的张量对应数学上的矩阵（matrix）；具有两个轴以上的张量没有特殊的数学名称。

x = torch.arange(12)
print(x)
print(x.size())
print(x.shape)
x = x.reshape(4, -1)
print(x)
print(x.reshape(3, 4))
print(torch.zeros(2, 3, 4) + 1)

# 随机采样
x = torch.randn(3, 4)
print(x)
y = torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
print(y)

print('---运算符-按元素---')
x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x ** y)
print(x // y)

x = torch.arange(12, dtype=torch.float32).reshape((3, 4))
y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
print(x)
print(y)
# （轴‐0，形状的第1个元素）堆叠
print(torch.cat((x, y), dim=0))
# （轴‐1，形状的第2个元素）堆叠
print(torch.cat((x, y), dim=1))

print('---索引和切片---')
y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
print(y[:2])
print(y[:, :2])
